//
//  main.c
//  选择排序
//
//  Created by szcq on 2021/4/22.
//

#include <stdio.h>

int main(int argc, const char * argv[]) {
    // insert code here...
//    printf("Hello, World!\n");
    
    
    int values[5] = {23,45,5,87,13};
    //选择排序，每次遍历 最值都在 左边，
    int length = sizeof(values) / sizeof(values[0]);
    
    /**
     排序分析:
     第一次  遍历4次 找出最值  * * * *
     第二次  遍历3次 找出最值  * * *
     第二次  遍历2次 找出最值  * *
     第二次  遍历1次 找出最值  *
     */
    // i : 被比较的索引值
    // j + 1 : 比较的索引值
    
    
    for (int i = 0; i < length; i++) {
        printf("%i,",values[i]);
    }
    printf("\n-----排序前-----\n");
    for (int i = 0; i < length - 1; i++) {
        for (int j = i; j < length - 1; j++) {
            
            // 被比较的索引值 i
            //   比较的索引值 j + 1
            int k = j + 1;
            printf("i == %i  ",i);
            printf("k == %i  ",k);
            
            if (values[i] > values[k]) {
                //交换数据
                int temp = values[i];
                values[i] = values[k];
                values[k] = temp;
            }
        }
        printf("\n");
    }

    printf("-----排序后-----\n");
    
    for (int i = 0; i < length; i++) {
        printf("%i,",values[i]);
    }
    
   
    
    return 0;
}


void test01() {
    int a,b,c;
    a = 7;
    b = 3;
    c = 2;
    
    if (a > b) {
        //交换两个数的值
        
        //任何整数按位异或上另一个整数两次结果还是那个数
        // 按位异或 对应两位 不相同 返回1，相同返回0
        // 多个整数按位异或的结果和顺序无关 所以需要   a = a ^ b,  而不能连写的原因,因为任何整数按位异或上另一个整数两次结果还是那个数
        a = a ^ b;
        b = a ^ b; // a ^ b ^ b
        a = a ^ b; // a ^ a ^ b
    }
    
    if (a > c) {
        //交换两个数的值
        a = a + c; // a = 9
        c = a - c; // a = 9 c = 2
        a = a - c; // 2
    }
    
    if (b > c) {
        //交换两个数的值
        int temp = b;
        b = c;
        c = temp;
    }
    
    printf("a = %i,b = %i,c = %i,",a,b,c);
    
}
